#ifndef FOLDER_H
#define FOLDER_H

#include <QTreeWidgetItem>
#include <QVector>
#include <QFile>
#include "soundfile.h"
#include <QTableWidget>
#include <QPlainTextEdit>
#include "ui_mainwindow.h"

class Folder : public QObject, public QTreeWidgetItem
{
    Q_OBJECT

    Ui::MainWindow *ui;

public:
    Folder(Folder* parent, QString parentPath, Ui::MainWindow *p_ui);
    void makeCopy( Folder* copy);       //  Конструктор копии. В нем есть нужда, поскольку при вызове clear обнуляются указатели. Даже если создать копию объекта Folder
                                        // всё равно возникнет проблема, потому что векторы содержат указатели на объекты, соответственно при создании копии объекта Folder
                                        // указатели из векторов не меняются
                                        // В конструкторе копии нужно создавать их копии и присваивать их копии Folder

    bool loadInfo(QFile* infoFile); // Загрузка информации о папке из файла конфигурации

    int getFilesCount()   { return files.count(); }
    int getFoldersCount() { return folders.count(); }

       // Инкапсуляция
    void addTag(QString tag) { tags << tag; }
    void clearTags()         { tags.clear();}

    void setIconStyle (int newStyle)        { iconStyle = newStyle;}
    void setCommentary( QString commentary) { this->commentary = commentary;}


    Folder* getParentFolder()   { return parentFolder; }
    QString getType()           { return type; }
    QString getPath()           { return path; }
    QString getName()           { return name; }
    QString getCommentary()     { return commentary; }

    QStringList getTags()       { return tags; }

    QVector <Folder*>       getFolders() { return folders; }
    QVector <SoundFile*>    getFiles()   { return files; }

    SoundFile* getFile(int index) { return files.at(index); }

    int getIconStyle() { return iconStyle; }
protected:
    QString type;   // Тип объекта (для правильной работы слотов)
    // Свойства папки
    QString path;
    QString name;
    QString commentary;

    QStringList tags;

    // Оформление папки
    int        iconStyle;

    // Содержимое папки
    QVector <Folder*>    folders;
    QVector <SoundFile*> files;

    Folder *parentFolder;

public slots:
    void showFilesInTree(QTreeWidgetItem *item);
    void updateFolderView();
};

#endif // FOLDER_H
